home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / prog_c / lsdoor09.zip / DATA.H < prev    next >
Text File  |  1996-06-02  |  12KB  |  304 lines

  1. // Data.H
  2.  
  3. #ifndef __DATA_HEADER_FILE__
  4. #define __DATA_HEADER_FILE__
  5.  
  6. #ifdef DropModule
  7. #ifdef DataModule
  8. #error  Both DataModule & DropModule defined!
  9. #endif
  10. #endif
  11.  
  12. #include "lstree.h"
  13.  
  14. char *WithLSPath( char *fname );     // Returns fname appended to "D:\Ls\"
  15. char *WithNodePath( const char *fname );  // Returns as "D:\Ls\Node2\F.Ext"
  16. void  CreateNodePath( void );        // Creates directories D:\Ls\NodeX
  17.  
  18. //void reset_all_mail( void );           // Called when mail DB is created...
  19.  
  20. char *set_ext( char *sout, char *sin, char *ext ); // Set extension of sin
  21. char *set_ext( char *s, char *ext );               // Set extension of s
  22.  
  23.  
  24. global char had_to_create;   // (0/1) Last call to Open() created new DB...
  25.  
  26. #define load_master() read_single(WithLSPath("Master.Dat"), &master, sizeof(master), true )
  27. #define save_master() write_single(WithLSPath("Master.Dat"), &master, sizeof(master) )
  28.  
  29. #define load_config() read_single( WithLSPath(configf), &config, sizeof(config), true )
  30. #define save_config() write_single( WithLSPath(configf), &config, sizeof(config) )
  31.  
  32.  
  33.  
  34. class TData {
  35.  protected:
  36.   ulong nextPos;
  37.   int keyFirst;
  38.   int firstopen;
  39.   int openStyle, openShare;
  40.   Entry ent;
  41.   Index idx;
  42.   int handle;
  43.   char fname[80];
  44.   char idx_fname[80];
  45.   ulong high;
  46.  
  47.  public:
  48.   int end;
  49.   int isopen;
  50.   int type;
  51.  
  52.   uint len;
  53.  
  54.   TData( const char far *FileName, uint setLen=0, uint setType=0,
  55.     int OpenStyle=O_RDWR|O_BINARY, int OpenShare=SH_DENYNONE );
  56.   TData( uint setLen=0, uint setType=0,
  57.     int OpenStyle=O_RDWR|O_BINARY, int OpenShare=SH_DENYNONE );
  58.   ~TData();
  59.   void SetOpen( uint OpenStyle=0, uint OpenShare=0 );
  60.   void SetFileName( const char *FileName );
  61.   int Open(void);
  62.   int CheckVersion(void);
  63.   void Close(void);
  64.   void Reset(void);
  65.   ulong ReadHigh(void);                  // Read only...
  66.   ulong GetHigh(void);                   // Read and add one...
  67.   ulong ConfirmHigh(void);               // Recovery routine...
  68.   int Load( ulong num, void *buf );
  69.   int Load( unsigned char *keyword, void *buf );
  70.   int Load( void *buf );
  71.   int Load( unsigned char *keyword, void *buf, int offset, int maxlen, int search=0, char direction=1 );
  72.   int Load( void );
  73.   unsigned char *LoadKey( char direction/*0 or 1*/ );
  74.   int LoadThisKey( void *buf );
  75.   int Save( unsigned char *keyword, ulong num, void *buf );
  76.   int Add( unsigned char *keyword, ulong num, void *buf );
  77.   int Delete( ulong num, unsigned char *keyword );
  78.   int Change( ulong num, unsigned char *keyword, unsigned char *newkey );
  79.   int Swap( ulong numA, ulong numB );
  80.  
  81.   int Open( int Handle );    // Functions reserved for use by LsFix & Maint
  82.   int ReInit( void );
  83.   int ReadHeader(void);
  84.   int WriteHeader(void);     // This function is never used by TData itself
  85. };
  86.  
  87.  
  88. /////////  Declarations...
  89.  
  90. #ifdef DataModule
  91. #ifndef _DOOR_CODE_
  92. TData Node( sizeof(node), 2, O_RDWR|O_BINARY, SH_COMPAT );
  93. #else
  94. TData Node( sizeof(node), 2, O_RDWR|O_BINARY, SH_DENYRW );
  95. #endif
  96. TData Security( sizeof(security), 1 );
  97. TData User( sizeof(user), 1 );
  98. TData File( sizeof(file), 1 );
  99. TData Mail( sizeof(mail), 1 );
  100. TData MailArea( sizeof(mailarea), 2 );
  101. TData FileArea( sizeof(filearea), 2 );
  102.  
  103. #ifndef _DOOR_CODE_
  104. TData Event( sizeof(event), 2 );
  105. #endif
  106.  
  107. #else    // Else ifdef DataModule
  108.  
  109. extern TData Node, Security, User;
  110. extern TData File, Mail, MailArea, FileArea;
  111. #ifndef _DOOR_CODE_
  112. extern TData Event;
  113. #endif
  114.  
  115. #endif   // End ifdef DataModule
  116.  
  117. void InitDataSystem();
  118.  
  119. #define reset_node()     Node.Reset()
  120. #define load_node(N)     Node.Load( N, &node )
  121. #define save_node()      Node.Save( node.ID.keyword, node.ID.num, &node )
  122. #define add_node()       Node.Add( node.ID.keyword, node.ID.num, &node )
  123. #define delete_node()    Node.Delete( node.ID.num, node.ID.keyword )
  124. #define open_node()      Node.Open()
  125. #define close_node()     Node.Close()
  126. #define version_node()   Node.CheckVersion()
  127. #define isopen_node()    Node.isopen
  128. #define end_node()       Node.end
  129. #define high_node()      Node.GetHigh()
  130. #define find_node(W)     Node.Load( W, &node )
  131. #define next_node()      Node.Load( &node )
  132. #define change_node(O,N) Node.Change( node.ID.num, O, N )
  133. #define number_node(N)   Node.Change( node.ID.num, N )
  134.  
  135.  
  136.  
  137. #define reset_security()     Security.Reset()
  138. #define load_security(N)     Security.Load( N, &security )
  139. #define save_security()      Security.Save( security.name, security.num, &security )
  140. #define load_secserch(N)     Security.Load( N, &secserch )
  141. #define save_secserch()      Security.Save( secserch.name, secserch.num, &secserch )
  142. #define add_security()       Security.Add( security.name, security.num, &security )
  143. #define delete_security()    Security.Delete( security.num, security.name )
  144. #define open_security()      Security.Open()
  145. #define close_security()     Security.Close()
  146. #define version_security()   Security.CheckVersion()
  147. #define isopen_security()    Security.isopen
  148. #define end_security()       Security.end
  149. #define high_security()      Security.GetHigh()
  150. #define find_security(W)     Security.Load( W, &security )
  151. #define next_security()      Security.Load( &security )
  152. #define key_security()       Security.LoadKey()
  153. #define change_security(O,N) Security.Change( security.num, O, N )
  154. #define number_security(N)   Security.Change( security.num, N )
  155.  
  156.  
  157. #define reset_user()          User.Reset()
  158. #define load_user(N)          User.Load( N, &user )
  159. #define load_userserch(N)     User.Load( N, &userserch )
  160. #define save_user()           User.Save( user.handle, user.num, &user )
  161. #define save_userserch()      User.Save( userserch.handle, userserch.num, &userserch )
  162. #define add_user()            User.Add( user.handle, user.num, &user )
  163. #define add_userserch()       User.Add( userserch.handle, userserch.num, &userserch )
  164. #define delete_user()         User.Delete( user.num, user.handle )
  165. #define delete_userserch()    User.Delete( userserch.num, userserch.handle )
  166. #define open_user()           User.Open()
  167. #define close_user()          User.Close()
  168. #define version_user()        User.CheckVersion()
  169. #define isopen_user()         User.isopen
  170. #define end_user()            User.end
  171. #define high_user()           User.GetHigh()
  172. #define find_user(W)          User.Load( W, &user )
  173. #define find_userserch(W)     User.Load( W, &userserch )
  174. #define next_user()           User.Load( &user )
  175. #define next_userserch()      User.Load( &userserch )
  176. #define key_user()            User.LoadKey()
  177. #define change_user(O,N)      User.Change( user.num, O, N )
  178. #define change_userserch(O,N) User.Change( userserch.num, O, N )
  179. #define number_user(N)        User.Change( user.num, N )
  180. #define number_userserch(N)   User.Change( userserch.num, N )
  181.  
  182.  
  183. #define reset_mailarea()     MailArea.Reset()
  184. #define load_mailarea(N)     MailArea.Load( N, &mailarea )
  185. #define save_mailarea()      MailArea.Save( mailarea.ID.keyword, mailarea.ID.num, &mailarea )
  186. #define add_mailarea()       MailArea.Add( mailarea.ID.keyword, mailarea.ID.num, &mailarea )
  187. #define delete_mailarea()    MailArea.Delete( mailarea.ID.num, mailarea.ID.keyword )
  188. #define open_mailarea()      MailArea.Open()
  189. #define close_mailarea()     MailArea.Close()
  190. #define version_mailarea()   MailArea.CheckVersion()
  191. #define isopen_mailarea()    MailArea.isopen
  192. #define end_mailarea()       MailArea.end
  193. #define high_mailarea()      MailArea.GetHigh()
  194. #define find_mailarea(W)     MailArea.Load( W, &mailarea )
  195. #define next_mailarea()      MailArea.Load( &mailarea )
  196. #define change_mailarea(O,N) MailArea.Change( mailarea.ID.num, O, N )
  197. #define number_mailarea(N)   MailArea.Change( mailarea.ID.num, N )
  198.  
  199. #define reset_mail()      Mail.Reset()
  200. #define load_mail(N)      Mail.Load( N, &mail )
  201. #define save_mail()       Mail.Save( mail.to, mail.num, &mail )
  202. #define add_mail()        Mail.Add( mail.to, mail.num, &mail )
  203. //#define delete_mail()     Mail.Delete( mail.num, mail.to )
  204. #define delete_mail()     destroy_mail( mail.num, mail.to )
  205. #define open_mail()       Mail.Open()
  206. #define close_mail()      Mail.Close()
  207. #define version_mail()    Mail.CheckVersion()
  208. #define isopen_mail()     Mail.isopen
  209. #define end_mail()        Mail.end
  210. #define high_mail()       Mail.GetHigh()
  211. #define find_mail_to(W,D) Mail.Load( W, (void *)&mail, 0, 99, 2, D )
  212. //#define find_mail_to(W,D) Mail.Load( W, (void *)&mail, 5, 99, 2, D )
  213. //#define find_mail_area(W) Mail.Load( W, (void *)&mail, 0, 4 )
  214. //#define find_mail(W)      Mail.Load( W, &mail )
  215. #define next_mail()       Mail.Load( &mail )
  216. #define key_mail(D)       Mail.LoadKey( D )
  217. #define key_mail_load()   Mail.LoadThisKey( (void *)&mail );
  218. #define change_mail(O,N)  Mail.Change( mail.num, O, N )
  219. #define number_mail(N)    Mail.Change( mail.num, N )
  220. //void mail_keyword( uchar *d );  // Figures current keyword and places in 'd'
  221.  
  222. int  load_mailbase( unsigned long fpos, unsigned int area, ulong mnum );
  223. int  save_mailbase( unsigned long fpos, unsigned int area, ulong mnum, uchar special=0 );
  224. int  delete_mailbase( unsigned long fpos, unsigned int area, ulong mnum );
  225. unsigned long free_mailbase( unsigned int area );
  226. unsigned long high_mailbase( unsigned int area );
  227. ulong fpos_mailbase( unsigned int area, unsigned long mnum );// Data Recovery
  228.  
  229.  
  230. #define reset_filearea()     FileArea.Reset()
  231. #define load_filearea(N)     FileArea.Load( N, &filearea )
  232. #define save_filearea()      FileArea.Save( filearea.ID.keyword, filearea.ID.num, &filearea )
  233. #define add_filearea()       FileArea.Add( filearea.ID.keyword, filearea.ID.num, &filearea )
  234. #define delete_filearea()    FileArea.Delete( filearea.ID.num, filearea.ID.keyword )
  235. #define open_filearea()      FileArea.Open()
  236. #define close_filearea()     FileArea.Close()
  237. #define version_filearea()   FileArea.CheckVersion()
  238. #define isopen_filearea()    FileArea.isopen
  239. #define end_filearea()       FileArea.end
  240. #define high_filearea()      FileArea.GetHigh()
  241. #define find_filearea(W)     FileArea.Load( W, &filearea )
  242. #define next_filearea()      FileArea.Load( &filearea )
  243. #define change_filearea(O,N) FileArea.Change( filearea.ID.num, O, N )
  244. #define number_filearea(N)   FileArea.Change( filearea.ID.num, N )
  245.  
  246.  
  247. #define reset_file()         File.Reset()
  248. #define load_file(N)         File.Load( N, &file )
  249. #define save_file()          File.Save( file.ID.keyword, file.ID.num, &file )
  250. #define add_file()              File.Add( file.ID.keyword, file.ID.num, &file )
  251. #define delete_file()        File.Delete( file.ID.num, file.ID.keyword )
  252. #define openfile()           File.Open()
  253. #define close_file()         File.Close()
  254. #define version_file()          File.CheckVersion()
  255. #define isopen_file()        File.isopen
  256. #define end_file()           File.end
  257. #define high_file()          File.GetHigh()
  258. #define file_keyword(W)        sprintf( W, "%-15.15s%i", file.filename, file.area )
  259. #define find_file_filename(W)   File.Load( W, (void *)&file, 0, 14, true )
  260. #define find_file_area(W)       File.Load( W, (void *)&file, 15, 6 )
  261. #define next_file()             File.Load( &file )
  262. #define key_file()              File.LoadKey()
  263. #define change_file(O,N)     File.Change( file.ID.num, O, N )
  264. #define number_file(N)       File.Change( file.ID.num, N )
  265.  
  266.  
  267.  
  268. global char eventTmp[80];
  269. #define reset_event()     Event.Reset()
  270. #define load_event(N)     Event.Load( N, &event )
  271. #define save_event()      Event.Save( event.ID.keyword, event.ID.num, &event )
  272. #define add_event()       Event.Add( event.ID.keyword, event.ID.num, &event )
  273. #define delete_event()    Event.Delete( event.ID.num, event.ID.keyword )
  274. #define open_event()      {sprintf( eventTmp, "Event%i.Dat", node.ID.num+1 );\
  275.                Event.SetFileName(WithLSPath(eventTmp)); Event.Open();}
  276. #define close_event()     Event.Close()
  277. #define version_event()   Event.CheckVersion()
  278. #define isopen_event()    Event.isopen
  279. #define end_event()       Event.end
  280. #define high_event()      Event.GetHigh()
  281. #define find_event(W)     Event.Load( W, &event )
  282. #define next_event()      Event.Load( &event )
  283.  
  284. #define change_event(O,N) Event.Change( event.ID.num, O, N )
  285. #define number_event(N)   Event.Change( event.ID.num, N )
  286.  
  287.  
  288.  
  289. ///////// Single Record DataFiles
  290.  
  291. int read_single( char *fname, void *s, long size, uchar checkVersion=false, uchar errors=true );
  292. int write_single( char *fname, void *s, long size );
  293.  
  294. global unsigned long _data_fpos;
  295.  
  296.  
  297. #endif
  298.  
  299. // End of Data.Cpp
  300.  
  301.  
  302.  
  303.  
  304.